/*
 * @Author: Cxy
 * @Date: 2021-05-23 15:03:35
 * @LastEditors: Cxy
 * @LastEditTime: 2022-11-16 15:04:00
 * @FilePath: /daimler-transport-admind:/giteeBlog/blogServe/socket/login.js
 */
const io = require('./server')
const { update_Find_Online } = require('./until')
const { find, updateMany } = require('../mongo/db')
module.exports = login = socket => {
  // 客户端刷新页面时，替换sockeID并改变登录状态
  socket.on('Refresh_Get_User', async data => {
    // 将登录人加入全站房间与游客的创建的socket软隔离
    socket.join('rootRoom')
    update_Find_Online(data, socket)
  })
  // 登录前判断登录人是否多点登录，已多点登录推送当前登陆人消息并询问是否强制登录，未多点登录直接登录成功并改变登录状态
  socket.on('sk_Initial_Login', async data => {
    // 将登录人加入全站房间与游客的创建的socket软隔离
    socket.join('rootRoom')
    update_Find_Online(data, socket)
  })
  // 强制登出其他登陆人客户端
  socket.on('Current_Out_Users', async data => {
    const { socket_Id } = data
    // 通过该连接对象to(socketId)与链接到这个对象的客户端进行单独通信
    io.to(socket_Id).emit('Ago_Login_Users', '账号在其他位置登录，请留意被盗');
  })
  // 强制用户下线
  socket.on('Forced_Offline', async data => {
    const { admin_Code } = data
    const user_Data = await find('users', { admin_Code }, {}, { socket_Id: 1 })
    io.to(user_Data.data[0].socket_Id).emit('Ago_Login_Users', '您已被管理员强制下线');
    update_Find_Online(data, socket, false)
  })
  // 冻结账户
  socket.on('frozen_Person', async data => {
    const { admin_Code } = data
    const user_Data = await find('users', { admin_Code: admin_Code }, {}, { socket_Id: 1 })
    io.to(user_Data.data[0].socket_Id).emit('Ago_Login_Users', '该账户已冻结');
    await updateMany('users', { admin_Code }, { socket_Id: '', online_Offline: 0, frozen_State: 1 })
  })
}